perm filename CKMEM.PAS[TEX,ALS] blob
sn#603451 filedate 1981-08-04 generic text, type C, neo UTF8
COMMENT ā VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 PROCEDURE ckals (* main ALS memory checking routine *)
C00003 00003 PROCEDURE tracemem
C00009 00004 (* PROCEDURE CKMEM
C00021 ENDMK
Cā;
PROCEDURE ckals; (* main ALS memory checking routine *)
LABEL 1;
VAR P,Q: integer;
BEGIN
IF ALS>=0 THEN ckmem;
P:=ALS; Q:=ALS+1;
WHILE Q<>ALS DO
BEGIN
Q:=ALS;
BEGIN END; (* Set STOP here*)
if ALS>2 then
begin
println(101); print(63); printint(ALS);
searchmem(als);
END
ELSE
BEGIN
IF ALS=Q THEN GOTO 1;
IF ALS=1 THEN checkmem(true);
IF ALS=2 THEN checkmem(false);
end;
end;
1:
if ALS>2 then ALS:=P;
END;
*)
PROCEDURE tracemem;
LABEL 0,1;
VAR c,p,q,L,LL,r,s,w: integer;
BEGIN
FOR p:=0 TO 24999 DO free[p]:=false;
p:=rover;
L:=mem[p].twohalves.lhword;
r:=mem[p].twohalves.rhword;
LL:=mem[p+1].twohalves.lhword;
s:=mem[p+1].twohalves.rhword;
c:=1; w:=s;
FOR q:=p TO (p+s) DO free[q]:=true;
println(164);
println(164);
println(82); print(111); print(118); print(101); print(114);
printint(p); print(164); (* Print Rover *)
p:=L;
print(82); print(108); print(105); print(110); print(107); (* Rlink *)
WHILE (p<25000) AND(p<>ROVER) DO
BEGIN (* Count all linked nodes *)
L:=mem[p].twohalves.lhword;
r:=mem[p].twohalves.rhword;
LL:=mem[p+1].twohalves.lhword;
s:=mem[p+1].twohalves.rhword;
IF (r=65535) AND (((p+s)<L) OR ((L+1)<p)) AND free[L]=false THEN
BEGIN
c:=c+1; w:=w+s;
FOR q:=p TO (p+s) DO free[q]:=true; (* mark all words as true *)
q:=p;
p:=L
END
ELSE
BEGIN
IF r<>65535 THEN
BEGIN
println(141); printint(p);print(158); (* NODE # bad *)
print(164); printint(r); (* ...# *)
END (* not free *)
ELSE
BEGIN
println(158); print(164); (* BAD *)
print(357); printint(s); print(164); (* size#... *)
print(108); print(264); (* L AT *)
printint(p); (* p *)
print(111); print(102); (* of *)
printint(L); print(164); (* L *)
END;
println(164); print(67); printint(c); (* ...C# *)
print(164); print(87); printint(w); (* ...W# *)
GOTO 0
END;
END; (* Count all Rlinked nodes *)
0:
p:=rover;
L:=mem[p].twohalves.lhword;
r:=mem[p].twohalves.rhword;
LL:=mem[p+1].twohalves.lhword;
s:=mem[p+1].twohalves.rhword;
println(164);
println(76); print(108); print(105); print(110); print(107); (* Llink *)
printint(p); (* Print Rover *)
p:=LL;
WHILE (p<25000) AND(p<>ROVER) DO
BEGIN (* Count all Llinked nodes *)
L:=mem[p].twohalves.lhword;
r:=mem[p].twohalves.rhword;
LL:=mem[p+1].twohalves.lhword;
s:=mem[p+1].twohalves.rhword;
IF (r=65535) AND (((p+s)<LL) OR ((LL+1)<p)) AND free[LL]=false THEN
BEGIN
c:=c+1; w:=w+s;
FOR q:=p TO (p+s) DO free[q]:=true; (* mark all words as true *)
q:=p;
p:=LL
END
ELSE
BEGIN
IF r<>65535 THEN
BEGIN
println(141); printint(p);print(158); (* NODE # bad *)
print(164); printint(r); (* ...# *)
END (* not free *)
ELSE
BEGIN
println(158); print(164); (* BAD *)
print(357); printint(s); print(164); (* size#... *)
print(108); print(108); print(264); (* LL AT *)
printint(p); (* p *)
print(111); print(102); (* of *)
printint(LL); print(164); (* LL *)
END;
println(164); print(67); printint(c); (* ...C# *)
print(164); print(87); printint(w); (* ...W# *)
GOTO 1
END;
END; (* Count all Llinked nodes *)
1:
println(84); print(111); print(116); print(97); print(108); (* Total *)
println(164); print(67); printint(c); (* ...C# *)
print(164); print(87); printint(w); (* ...W# *)
c:=0; w:=0;
FOR p:=1 TO 24999 DO
BEGIN (* Look for an unlinked free nodes *)
IF (free[p]=false) AND (mem[p].twohalves.rhword=65535) THEN
BEGIN
L:=mem[p].twohalves.lhword;
LL:=mem[p+1].twohalves.lhword;
s:=mem[p+1].twohalves.rhword;
IF (L<25000) AND (LL<25000) AND (s<9) THEN
BEGIN
IF (mem[L+1].twohalves.lhword=p) OR (mem[LL].twohalves.lhword=p) THEN
BEGIN
c:=c+1; w:=w+s;
END;
END;
END;
END;
IF c>0 THEN
BEGIN
println(158); print(158); (* BAD BAD *)
print(67); printint(c); (* C# *)
print(164); print(87); printint(w); (* ... W# *)
print(164);
END;
END;
(* PROCEDURE CKMEM;
VAR L,LL,LLL,I,R,S: integer;
blocksize,count: integer;
BEGIN
println(164);
I:=0;
WHILE mem[I].twohalves.rhword<>65535 DO I:=I+1; (* Get to start *)
blocksize:=0; count:=0;
WHILE I<25000 DO
BEGIN
R:=mem[I].twohalves.rhword;
S:=mem[I+1].twohalves.rhword; (* size *)
L:=mem[I].twohalves.lhword; (* link *)
LL:=mem[I+1].twohalves.lhword; (* llink *)
IF R=65535 THEN
BEGIN (* If R==65535 *)
IF (S>0) AND ((I+S)<25000) THEN
BEGIN (* If S>0 AND I+S<25000 *)
println(70); print(114); print(101); print(101); (* Print Free *)
print(164); printint(I); (* Print I *)
print(164); print(76); print(61); printint(L); (* PRINT L *)
print(164); print(76); print(76); print(61); printint(LL); (* PRINT LL *)
print(164); print(83); print(61); printint(S); (* PRINT S *)
blocksize:=0;
I:=I+S;
WHILE (mem[I].twohalves.rhword=65535) AND
(mem[I+1].twohalves.rhword>0) AND
((I+mem[I+1].twohalves.rhword)<25000) do
BEGIN (* While S>0 AND I+S<25000 *)
S:=mem[I+1].twohalves.rhword;
blocksize:=blocksize+S;
count:=count+1;
I:=I+S;
END; (* While S>0 AND I+S<25000 *)
IF blocksize>0 THEN
BEGIN
print(216); printint(blocksize); (* + available *)
print(164); print(311); printint(count); (* for count *)
blocksize:=0; count:=0;
END;
END; (* of IF S>0 AND I+S<25000 *)
IF mem[I].TWOHALVES.RHWORD=65535 THEN
BEGIN (* Phony free node *)
println(80); print(104); print(111); print(110); print(121);
print(164); printint(I); (* I *)
print(164); print(76); print(61);
printint(mem[I].twohalves.lhword); (* Print link *)
print(164); print(76); print(76); print(61);
printint(mem[I+1].twohalves.lhword); print(164); (* Print llink *)
print(83); print(61); printint(mem[I+1].twohalves.rhword);
IF I<25000 THEN I:=I+1;
END; (* Phony free node *)
END; (* If R=65535 *)
R:=mem[I].twohalves.rhword;
L:=mem[I].twohalves.lhword; (* link *)
LL:=mem[I+1].twohalves.lhword; (* llink *)
IF R<>65535 THEN
BEGIN (* If R<>65535 *)
count:=1;
println(141); print(164); printint(I); (* Node I *)
L:=mem[I].twohalves.lhword;
print(164); print(76); print(61); printint(L); (* Print link *)
IF ((L+1)<25000) AND (mem[L+1].twohalves.lhword=I) then
print(325) (* Print ok *)
else print(110); print(103); (* Print ng *)
print(164); print(76); print(76); print(61);
LL:=mem[I+1].twohalves.lhword;
printint(LL); (* Print llink *)
IF (LL<25000) AND (mem[LL].twohalves.lhword=I) then
print(325) (* Print ok *)
else print(110); print(103); (* Print ng *)
print(164); print(136); printint(mem[I].twohalves.byte2); (* Print typ *)
IF ((LL-I)>1) AND ((LL-I)<9) THEN I:=LL
ELSE IF I<24998 THEN I:=I+2;
WHILE ((mem[I].twohalves.rhword<>65535)) AND (I<24999) DO
BEGIN
count:=count+1;
I:=I+1;
END;
IF count>1 THEN
BEGIN
print(164); printint(count);
END;
END; (* If R<>65535 *)
END; (* While I<25000 *)
println(164);
END;
*)
(* PROCEDURE tracemem;
LABEL 0,1;
VAR c,p,q,L,LL,r,s,w: integer;
BEGIN
FOR p:=0 TO 24999 DO free[p]:=false;
p:=rover;
L:=mem[p].twohalves.lhword;
r:=mem[p].twohalves.rhword;
LL:=mem[p+1].twohalves.lhword;
s:=mem[p+1].twohalves.rhword;
c:=1; w:=s;
FOR q:=p TO (p+s) DO free[q]:=true;
print(164);
print(82); print(111); print(118); print(101); print(114);
printint(p); print(164); (* Print Rover *)
p:=L;
print(82); print(108); print(105); print(110); print(107); (* Rlink *)
print(164);
WHILE (p<25000) AND(p<>ROVER) DO
BEGIN (* Count all linked nodes *)
L:=mem[p].twohalves.lhword;
r:=mem[p].twohalves.rhword;
LL:=mem[p+1].twohalves.lhword;
s:=mem[p+1].twohalves.rhword;
IF (r=65535) AND (((p+s-1)<L) OR ((L+s-1)<p)) AND free[p]=false THEN
BEGIN
c:=c+1; w:=w+s;
FOR q:=p TO (p+s-1) DO free[q]:=true; (* mark all words as true *)
q:=p;
p:=L
END
ELSE
BEGIN
IF r<>65535 THEN
BEGIN
println(141); printint(p);print(158); (* NODE # bad *)
print(164); printint(r); print(164); (* ...# *)
END (* not free *)
ELSE
BEGIN
print(164); print(158); print(164); (* BAD *)
print(357); printint(s); print(164); (* size#... *)
print(264); (* AT *)
printint(p); print(164); (* p *)
print(108); printint(L); print(164); (* L *)
END;
println(164); print(67); printint(c); (* ...C# *)
print(164); print(87); printint(w); (* ...W# *)
GOTO 0
END;
END; (* Count all Rlinked nodes *)
0:
p:=rover;
L:=mem[p].twohalves.lhword;
r:=mem[p].twohalves.rhword;
LL:=mem[p+1].twohalves.lhword;
s:=mem[p+1].twohalves.rhword;
println(164);
println(76); print(108); print(105); print(110); print(107); (* Llink *)
p:=LL;
WHILE (p<25000) AND(p<>ROVER) DO
BEGIN (* Count all Llinked nodes *)
L:=mem[p].twohalves.lhword;
r:=mem[p].twohalves.rhword;
LL:=mem[p+1].twohalves.lhword;
s:=mem[p+1].twohalves.rhword;
IF (r=65535) AND (((p+s-1)<LL) OR ((LL+s-1)<p)) AND free[p]=false THEN
BEGIN
c:=c+1; w:=w+s;
FOR q:=p TO (p+s-1) DO free[q]:=true; (* mark all words as true *)
q:=p;
p:=LL
END
ELSE
BEGIN
IF r<>65535 THEN
BEGIN
println(141); printint(p);print(158); (* NODE # bad *)
print(164); printint(r); (* ...# *)
END (* not free *)
ELSE
BEGIN
println(158); print(164); (* BAD *)
print(357); printint(s); print(164); (* size#... *)
print(264); (* AT *)
printint(p); print(164); (* p *)
print(108);
print(108); printint(LL); print(164); (* LL *)
END;
println(164); print(67); printint(c); (* ...C# *)
print(164); print(87); printint(w); (* ...W# *)
GOTO 1
END;
END; (* Count all Llinked nodes *)
1:
println(84); print(111); print(116); print(97); print(108); (* Total *)
println(164); print(67); printint(c); (* ...C# *)
print(164); print(87); printint(w); (* ...W# *)
c:=0; w:=0;
FOR p:=1 TO 24999 DO
BEGIN (* Look for an unlinked free nodes *)
IF (free[p]=false) AND (mem[p].twohalves.rhword=65535) THEN
BEGIN
L:=mem[p].twohalves.lhword;
LL:=mem[p+1].twohalves.lhword;
s:=mem[p+1].twohalves.rhword;
IF (L<25000) AND (LL<25000) AND (s<9) THEN
BEGIN
IF (mem[L+1].twohalves.lhword=p) OR (mem[LL].twohalves.lhword=p) THEN
BEGIN
c:=c+1; w:=w+s;
END;
END;
END;
END;
IF c>0 THEN
BEGIN
print(164);
print(158);print(164); print(158); (* BAD BAD *)
print(164); print(67); printint(c); (* C# *)
print(164); print(87); printint(w); (* ... W# *)
println(164);
END;
println(65); print(118); print(97); print(105); print(108); (* Avail *)
p:=mem[49152].twohalves.lhword;
c:=0;
WHILE p<>0 do
BEGIN
p:=mem[p].twohalves.lhword;
c:=c+1;
END;
print(164); printint(c);
println(164); println(164);
END;
*)